#include "SerialModif.h"


void SerialModif::begin(long bauds)
{
  _root = NULL;
  Serial.begin(bauds);
  Serial.setTimeout(10); //temps d'attente pour rentrer la valeur
                         //doit être la plus petite possible pour ne pas bloquer le programme
                         //et assez grande pour avoir le temps de donner toutes les valeurs
  Serial.println("Demarrage de SerialModif...");
}


void SerialModif::set(String printName, char varName, float *var)
{
  Serial.println("Ajout d'une variable :" + printName);
  Variable* p = _root; // variable de parcours
  Variable* v = (Variable*)malloc(sizeof(Variable));
  v->printName = printName;
  Serial.println("Encore la variable" + v->printName);
  v->varName = varName;
  v->var = var;
  v->next = NULL;
  if(p!=NULL)
  {
    while(p->next != 0)
      p = p->next;
    p->next = v;
  }
  else {
    _root=v;
  }
}


void SerialModif::change()
{
  if(_root!=NULL)
  {
    while (Serial.available() > 0)
    {
      int index=Serial.read(); // lire un premier caractère

      if(index >= 'A' && index <= 'z') // si ce caractère est une lettre :
      {
        
        float valeur = Serial.parseFloat(); // récupère la valeur entrée par l'utilisateur
        Serial.print("Modif des valeurs ");
        Serial.println(valeur);
        Variable* p = _root;
        while(p != NULL)
        {
          if (index == p->varName)
          {
            *(p->var) = valeur;
          }
          p = p->next;
        }
      }
    }
  }
}


void SerialModif::print()
{
  if(_root!=NULL)
  {
    Variable* p = _root;
    while(p != NULL)
    {
      Serial.print(p->printName);
      Serial.print(*(p->var), 5);
      Serial.print("\t");
      p = p->next;
    }
    Serial.println();
  }
  else
  {
    Serial.println("Aucune variable a afficher");
  }
}


void SerialModif::print()
{
  if(_root!=NULL)
  {
    Variable* p = _root;
    while(p != NULL)
    {
      Serial.print(*(p->var), 5);
      Serial.print(";");
      p = p->next;
    }
    Serial.println();
  }
}
